<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 数组的拓展方法  => 官方提供的专门操作数组的方法

    // push() unshift()
    // pop()  shift()
    // splice()

    // indexOf()
    // includes()   => ES6

    // reverse()
    // join()

    // slice(startIndex,endIndex)
    // concat()    数组拼接

    // sort()

    // forEach()
    // map()
    // filter()
    // some()
    // every()

    // reduce()    数组归并
    // reduceRight()  数组逆向归并



    // concat()  数组拼接 => 可以接收多个数组,元素拼接形成一个新数组
    // 参数是一个数组 => 将数组中的每一个元素放到新数组
    // 参数是非数组  => 直接放到新数组


    // 返回值: 新数组
    // 是否影响原数组:不影响

    // var arr = [1, 2, 3];
    // var brr = [4, 5, 6];
    // var crr = [7, 8, 9];

    // var list = [];
    // list.push(arr, brr, crr);
    // console.log(list);


    // var arr = [1, 2, 3];
    // var brr = [4, 5, 6];
    // var crr = [7, 8, 9];

    // var list = [];
    // var result = list.concat(arr, brr, crr, "a", "b", "c");
    // console.log(result);
    // console.log(list, arr, brr, crr);






    // forEach 遍历数组  => 每循环一次,执行传入的函数 
    // 函数的三个参数(item, index, array)
    // item 循环的当前元素
    // index 循环的当前下标
    // array 原数组

    // var sum = 0;
    // list.forEach(function (item, index, array) {
    //     console.log(item, index, array);
    //     sum += item;
    // })
    // console.log(sum);


    // reduce(fn,initValue)   数组归并
    // 用法: 每循环一次,执行传入的函数 => 将函数的执行结果作为下次的初始值传入  => 返回最终的结果

    // 函数fn的四个参数(prev, item, index, array)
    // prev  1. 接收initValue作为初始值  2. 接收函数的返回值作为下次的初始值
    // item 循环的当前元素
    // index 循环的当前下标
    // array 原数组

    // initValue  设置prev的初始值
    //     a. 如果initValue有值    => 作为prev的初始值 prev = initValue;
    //     b. 如果initValue不传参  => 默认将数组的第一个值作为prev的初始值 ,从第二个元素开始向后遍历

    // 返回值: prev最终的结果
    // 常用于: 1. 数组求和  2. 归并 => 需要有值贯穿整个循环

    // var list = [2, 8, 4, 6, 5, 9, 3, 7, 1];
    // var result = list.reduce(function (prev, item, index, array) {
    //     console.log(prev, item, index, array);
    //     return prev + item; // 2 10
    // }, 0);
    // console.log(result);


    // var list = [2, 8, 4, 6, 5, 9, 3, 7, 1];
    // var result = list.reduce(function (prev, item, index, array) {
    //     console.log(prev, item, index, array);
    //     return prev + item; // 2 10
    // });
    // console.log(result);


    var list = [2, 8, 4, 6, 5, 9, 3, 7, 1];
    var result = list.reduceRight(function (prev, item, index, array) {
        console.log(prev, item, index, array);
        return prev + item; // 2 10
    }, 0);
    console.log(result);

















</script>

</html>